package com.itany.cloud.controller;

import com.itany.cloud.exception.OpenFeignException;
import feign.Logger;
import feign.Response;
import feign.Retryer;
import feign.codec.ErrorDecoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 石小俊
 */
@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

    @Bean
    public Retryer myRetryer() {
        // 默认值,表示不走重试策略,即出错之后不会进行重新访问
//        return Retryer.NEVER_RETRY;
        // 参数一:初始间隔时间,单位:毫秒
        // 参数二:重试的最大间隔时间,单位:秒
        // 参数三:最大请求数(此处的3次表示原始的1次+重试的2次)
        return new Retryer.Default(100, 1, 3);
    }

    @Bean
    public ErrorDecoder feignErrorDecoder() {
        System.out.println("FeignConfig.feignErrorDecoder");
        return new ErrorDecoder() {
            @Override
            public Exception decode(String s, Response response) {
                return new OpenFeignException(response.status(), "统一异常处理");
            }
        };
    }

}
